#define _CRT_SECURE_NO_WARNINGS 
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//const ll N = 1e5 + 5;
//vector<ll>a[N], ll dep[N], ans;
//void dfs(ll x, ll fa)
//{
//	dep[x] = 1;
//	for (auto& y : a[x])
//	{
//		if (y == fa)
//		{
//			continue;
//		}
//		dfs(y, x);
//		ans = max(ans ,dep[x] + dep[y]);
//		dep[x] = max(dep[x], dep[y] + 1);
//	}
//}
//int main()
//{
//	ll n = 0;
//	cin >> n;
//	for (ll i = 1; i <= n; i++)
//	{
//		ll x, y;
//		cin >> x >> y;
//		a[x].push_back(y);
//		a[y].push_back(x);
//	}
//	dfs(1, 0);
//	cout << ans - 1 << endl;
//	return 0;
//}
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//const ll N = 1e5 + 10;
//ll dp[N], siz[N], deep[N], ans, n;
//vector<ll>g[N];
//void dfs1(ll u, ll fa)
//{
//	siz[u] = 1;
//	deep[u] = deep[fa] + 1;
//	for (auto& y : g[u])
//	{
//		if (y == fa)
//		{
//			continue;
//		}
//		dfs1(y, u);
//		siz[u] += siz[y];
//	}
//}
//void dfs2(ll u, ll fa)
//{
//	for (auto& y : g[u])
//	{
//		if (y == fa)
//		{
//			continue;
//		}
//		dp[y] = dp[u] - siz[y] + (n - siz[y]);
//		dfs2(y, u);
//	}
//}
//void solve()
//{
//	cin >> n;
//	for (ll i = 1; i < n; i++)
//	{
//		ll x, y;
//		cin >> x >> y;
//		g[x].push_back(y);
//		g[y].push_back(x);
//	}
//	deep[0] = -1;
//	dfs1(1, 0);
//	for (ll i = 1; i <= n; i++) dp[1] += deep[i];
//	dfs2(1, 0);
//	ans = dp[1];
//	for (ll i = 1; i <= n; i++)
//	{
//		ans = min(ans, dp[i]);
//	}
//	cout << ans << endl;
//}
//int main()
//{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
//	solve();
//	return 0;
//}
//
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//const ll N = 1e5 + 10;
//ll dp[N], siz[N], deep[N], ans, n,k,sum,a[N];
//vector<ll>g[N];
//struct node
//{
//	ll val;
//	ll id;
//	bool operator < (const node& it) const
//	{
//		if (val == it.val)
//		{
//			return id <= it.id;
//		}
//		return val <= it.val;
//	}
//}nd[N];
//void dfs1(ll u, ll fa)
//{
//	siz[u] = a[u];
//	deep[u] = deep[fa] + 1;
//	for (auto& y : g[u])
//	{
//		if (y == fa)
//		{
//			continue;
//		}
//		dfs1(y, u);
//		siz[u] += siz[y];
//	}
//}
//void dfs2(ll u, ll fa)
//{
//	for (auto& y : g[u])
//	{
//		if (y == fa)
//		{
//			continue;
//		}
//		dp[y] = dp[u] - siz[y] + (sum - siz[y]);
//		dfs2(y, u);
//	}
//}
//void solve()
//{
//	cin >> n >> k;
//	for (ll i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//		sum += a[i];
//	}
//	for (ll i = 1; i < n; i++)
//	{
//		ll x, y;
//		cin >> x >> y;
//		g[x].push_back(y);
//		g[y].push_back(x);
//	}
//	deep[0] = -1;
//	dfs1(1, 0);
//	for (ll i = 1; i <= n; i++) dp[1] += deep[i] * a[i];
//	dfs2(1, 0);
//	for (ll i = 1; i <= n; i++)
//	{
//		nd[i].val = dp[i];
//		nd[i].id = i;
//	}
//	sort(nd + 1, nd + 1 + n);
//	cout << nd[k].id << endl;
//}
//int main()
//{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
//	solve();
//	return 0;
//}
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//const ll N = 1e5 + 10;
//ll dp[N][2], siz[N], deep[N], ans, n, k, sum, a[N];
//vector<ll>g[N];
//void dfs(ll v, ll fa)
//{
//	dp[v][1] = 1;
//	for (auto& y : g[v])
//	{
//		if (v == fa)
//		{
//			continue;
//		}
//		dfs(y, v);
//		dp[v][0] += a[v];
//		dp[v][1] -= a[v];
//	}
//}
//void solve()
//{
//	cin >> n;
//	for (ll i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//		sum += a[i];
//	}
//	for (ll i = 1; i <= n - 1; i++)
//	{
//		ll u, v;
//		g[v].push_back(u);
//	}
//	dfs(1, 0);
//	for (ll i = 1; i <= n; i++)
//	{
//		sum += dp[i][]
//	}
//}
//int main()
//{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
//	solve();
//	return 0;
//}
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//const ll N = 1e5 + 10;
//ll a[N], n,dp[N][2];
//vector<ll>g[N];
//void dfs(ll x, ll fa)
//{
//	dp[x][1] += a[x];
//	for (auto& y : g[x])
//	{
//		if (y == fa)
//		{
//			continue;
//		}
//		dfs(y,x);
//		dp[x][0] += max(dp[y][1], dp[y][0]);
//		dp[x][1] += dp[y][0];
//	}
//}
//int main()
//{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
//	cin >> n;
//	for (ll i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//	}
//	for (ll i = 1; i <= n - 1; i++)
//	{
//		ll u, v;
//		cin >> u >> v;
//		g[v].push_back(u);
//		g[u].push_back(v);
//	}
//	dfs(1, 0);
//	cout << max(dp[1][0], dp[1][1]) << endl;
//	return 0;
//}
//#include<bits/stdc++.h>
//using namespace std;
//using ll = long long;
//const ll N = 1e5 + 10;
//ll a[N], n,k,c,t,dp[N],deep[N],siz[N],sum;
//vector<ll>g[N];
//void dfs(ll u, ll fa)
//{
//	siz[u] = k;
//	deep[u] = deep[fa] + 1;
//	for (auto& y : g[u])
//	{
//		if (y == fa)
//		{
//			continue;
//		}
//		dfs1(y, u);
//		siz[u] += siz[y];
//	}
//}
//void dfs2(ll u, ll fa)
//{
//	sum += c;
//	for (auto& y : g[u])
//	{
//		if (y == fa)
//		{
//			continue;
//		}
//		dp[y] = dp[u] - siz[y] + (n * k - siz[y]);
//		dfs2(y, u);
//	}
//}
//int main()
//{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
//	cin >> t;
//	while (t--)
//	{
//		cin >> n >> k >> c;
//		for (ll i = 1; i <= n - 1; i++)
//		{
//			ll u, v;
//			cin >> u >> v;
//			g[v].push_back(u);
//			g[u].push_back(v);
//		}
//		deep[0] = -1;
//		dfs1(1, 0);
//		for (ll i = 1; i <= n; i++) dp[1] += deep[i];
//		dfs2(1, 0);
//		ll ans = dp[1];
//		for (ll i = 1; i <= n; i++)
//		{
//			ans = max(dp[i], ans);
//		}
//		a[t] = ans - sum;
//	}
//	sort(a, a + t);
//	cout << a[t - 1] << endl;
//	return 0;
//}
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll maxn = 2e5 + 50;
ll deep1[maxn], deep2[maxn];
vector<ll>edge[maxn];
void dfs(ll u, ll father)
{
	for (ll i = 0; i < edge[u].size(); i++)
	{
		ll next = edge[u][i];
		if (next == father)
		{
			continue;
		}
		deep1[next] = deep1[u] + 1;
		dfs(next, u);
	}
}
int main()
{
	ll t = 0;
	cin >> t;
	while (t--)
	{
		ll n = 0, k = 0, c = 0;
		cin >> n >> k >> c;
		memset(deep1, 0, sizeof(deep1));
		memset(deep2, 0, sizeof(deep2));
		for (ll i = 1; i <= n; i++) edge[i].clear();
		for (ll i = 1; i < n; i++)
		{
			ll u, v;
			cin >> u >> v;
			edge[u].push_back(v);
			edge[v].push_back(u);
		}
		dfs(1, 0);
		ll pos = 1;
		ll ans = 0;
		for (ll i = 1; i <= n; i++)
		{
			deep2[i] = deep1[i];
			if (deep1[pos] <= deep1[i])
			{
				pos = i;
			}
			ans = max(ans, deep1[i] * k);
		}
		memset(deep1, 0, sizeof(deep1));
		dfs(pos, 0);
		for (ll i = 1; i <= n; i++)
		{
			ans = max (ans,deep1[i] * k - deep2[i] * c);
		}
		cout << ans << endl;
	}
	return 0;
}






